package com.skivingcloud.report.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.skivingcloud.report.entity.MesExecSqlDto;
import com.skivingcloud.report.entity.ReportDatasource;
import com.skivingcloud.common.utils.PageParameter;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 报表数据源 服务层。
 *
 * @author skivingcloud
 * @since 2024-11-07
 */
public interface ReportDatasourceService extends IService<ReportDatasource> {
    /**
     * 分页查询报表数据源
     *
     * @param parameter 查询参数
     * @return 分页查询结果
     */
    Page<ReportDatasource> queryByPage(PageParameter<ReportDatasource> parameter);

    /**
     * 测试数据源连接
     * @param reportDatasource 报表数据源
     * @return 测试结果
     */
    Boolean testConnection(ReportDatasource reportDatasource) throws JsonProcessingException;

    /**
     * 新增数据源
     * @param reportDatasource 数据源
     * @return 结果
     */
    Boolean saveMe(ReportDatasource reportDatasource);

    /**
     * 修改数据源
     * @param reportDatasource 数据源
     * @return 结果
     */
    Boolean updateByIdMe(ReportDatasource reportDatasource);

    /**
     * 获取不脱敏的数据
     * @param id 主键
     * @return 数据源
     */
    ReportDatasource getByIdWithoutMask(String id);

    /**
     * 获取所有数据源
     * @return 数据源
     */
    List<ReportDatasource> getAllReportDatasource();

    /**
     * 执行SQL查询
     * @param mesExecSqlDto 执行参数
     * @return 执行结果
     */
    List<Map<String, Object>> execSql(MesExecSqlDto mesExecSqlDto) throws SQLException, JsonProcessingException;

    /**
     * 获取下拉框数据
     * @param param 参数
     * @return 数据
     */
    List<Map<String, Object>> getDatasourceSelectData(Map<String, String> param) throws SQLException;
}
